package utilities;

/**
 * Created with IntelliJ IDEA.
 * User: Jordi
 * Date: 29/12/12
 * Time: 18:43
 * To change this template use File | Settings | File Templates.
 */
public class MagatzemDades implements java.io.Serializable, Cloneable{

    protected int comptadorCamps = 0;
    protected Object[] dades = null;
    protected String[] nomCamp = null;
    protected boolean ignorarNomCampIndefinit = false;
    public MagatzemDades() {
    }
    public MagatzemDades(int comptadorCamps) {
        this.comptadorCamps = comptadorCamps;
        dades = new Object[comptadorCamps];
    }
    public int getComptadorCamps() {
        return comptadorCamps;
    }
    public void setComptadorCamps(int comptadorCamps) {
        this.comptadorCamps = comptadorCamps;
    }
    public void setObjecte(int indexCamps, Object valor) {
        this.dades[indexCamps - 1] = valor;
    }
    public Object getObjecte(int indexCamps) {
        return this.dades[indexCamps - 1];
    }
    public void setNomCampAmbValor(int indexCamp, String nom, Object valor) {
        this.dades[indexCamp - 1] = valor;
        if (this.nomCamp == null) {
            this.nomCamp = new String[this.comptadorCamps];
        }
        this.nomCamp[indexCamp - 1] = nom;
    }
    public void setObjecte(String nom, Object valor) {
        int indexCamp = findIndexCamp(nom);
        if (indexCamp < 0) {
            if (this.nomCamp == null) {
                if (!ignorarNomCampIndefinit) {
                    throw new IllegalArgumentException("Nom del camp sense actualitzar");
                }
                System.out.println("Nom del camp sense actualitzar");
            } else {
                if (!ignorarNomCampIndefinit) {
                    throw new IllegalArgumentException("No existeix el camp: " + nom);
                }
            }
        }
        this.dades[indexCamp - 1] = valor;
    }
    public Object getObjecte(String nom) {
        if (nom == null) {
            return null;
        }
        int indexCamp = findIndexCamp(nom);
        if (indexCamp < 0) {
            if (this.nomCamp == null) {
                if (!ignorarNomCampIndefinit) {
                    throw new IllegalArgumentException("Nom del camp sense actualitzar");
                }
            } else {
                if (!ignorarNomCampIndefinit) {
                    throw new IllegalArgumentException("No existeix el camp: " + nom);
                }
            }
            return null;
        }
        return this.dades[indexCamp - 1];
    }
    public void setNomCamp(int indexCamp, String nom) {
        if (this.nomCamp == null) {
            this.nomCamp = new String[this.comptadorCamps];
        }
        this.nomCamp[indexCamp - 1] = nom;
    }
    public String getNomCamp(int indexCamp) {
        if (this.nomCamp == null || this.nomCamp.length == 0) {
            return null;
        }
        return this.nomCamp[indexCamp - 1];
    }
    public int findIndexCamp(String nom) {
        int indexCamp = -1;
        if (this.nomCamp == null || nom == null) {
            return indexCamp;
        }
        for (int i = 0; i < this.comptadorCamps; i++) {
            if (nomCamp[i] == null) {
                continue;
            }
            if (nomCamp[i].equals(nom)) {
                indexCamp = i + 1;
                break;
            }
        }
        return indexCamp;
    }
    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        if (this.nomCamp != null && this.nomCamp.length == comptadorCamps) {
            for (int i = 0; i < comptadorCamps; i++) {
                sb.append(this.nomCamp[i]).append("=");
                if (this.dades[i] == null) {
                } else {
                    sb.append(this.dades[i]);
                }
                sb.append("&");
            }
            sb.deleteCharAt(sb.length() - 1);
        } else {
            for (int i = 0; i < comptadorCamps; i++) {
                if (this.dades[i] == null) {
                    sb.append("null");
                } else {
                    sb.append(this.dades[i]);
                }
                sb.append(", ");
            }
            sb.deleteCharAt(sb.length() - 2);
        }
        return sb.toString();
    }
    public Object[] getDades() {
        return this.dades;
    }
    public void setDades(Object[] dades) {
        this.dades = dades;
    }
    public boolean isIgnorarNomCampIndefinit() {
        return ignorarNomCampIndefinit;
    }
    public void setIgnorarNomCampIndefinit(boolean ignorarNomCampIndefinit) {
        this.ignorarNomCampIndefinit = ignorarNomCampIndefinit;
    }

}
